/*// 变量：var
// 常量：val
var mt = 2
mt = 3
mt

val im = 1
// im = 2 报红，不允许修改 reassignment to val
im*/

/**
 * 数据类型
 * Byte 八位  -128~127
 * Short 16位 -32768~32767
 * Int 32位 -2147483648~2147483647
 * Long 64位 -9223372036854775808~9223372036854775807
 * Float 32位
 * Double 64位
 * Char 16位
 * String
 * Boolean true or false
 * Unit 无值，等同于java语言的void
 * Nothing 是scala语言的最低端，其他任何类型的子类型
 * Null null or 空引用
 * 在Scala中所有的数据都是对象类
 */
/*
// 演示常用数据类型
// Byte
val a :Byte = 2
// char
val b :Byte = 'x'
// string
val c :String = "Hello world"
// unit
// 没有明确的指明U的类型，scala则会判断为Unit
val d = {}
d
// Nothing
// 可用于函数是否产生异常
def myFun() = throw new IllegalArgumentException
// Null
val n = null*/

// 演示字符串常用操作
val s = "Test String"
// 字符串长度
s.length
// 字符串连接
s.concat(" another string.")
s + " Hello word "
// 创建格式化字符串
val floatVal = 1.23
val intVal = 1000
val stringVal = "Simon"
printf("浮点型变量为："+"%.3f，整形变量为："+"%d，字符串变量为："+"%s",floatVal,intVal,stringVal)

// 字符串插值
println(s"这是 ${s}")
// 其他字符串常用方法
// 1 - endWith - 测试此字符串是否可以指定的后缀结束
val ew = "Hello Scala"
ew.endsWith("Scala")

// 2 - equls
val ew2 = "Hello Scala"
ew2.equals(ew)
ew2.equals(s)

// 3 - conpareTo 比较两个字符串
val str1 :String = "Strings"
val str2 :String = "Strings"
val str3 :String = "String123"
var result :Int = str1.compareTo(str2)
result = str2.compareTo(str3)
result = str3.compareTo(str1)

// 4 - compareToIgnoreCase - 比较2个字符串，不考虑大小写
val ew3 = "hello scala"
ew3.compareToIgnoreCase(ew2)
ew3.compareTo(ew2)

// 5 - indexOf - 返回指定字符串在此字符串中第一次出现的索引
ew.indexOf("o")
ew.indexOf("l",5)

// 6 - matches - 告知此字符串是否匹配给定的正则表达式
str1.matches("^S.+")
str3.matches("^S.*\\d+$")

//  7 - replace
ew.replace("Scala", "World")

// 8 - split
ew.split(" ")